#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<signal.h>
#include<sys/wait.h>

// //自定义信号集函数--sigset, 和sigprocmask
// int main()
// {
//     sigset_t iset;
//     sigemptyset(&iset); //初始化iset
//     sigaddset(&iset, 2);    //把2，9号信号加入iset
//     sigaddset(&iset, 9);    
//     sigprocmask(SIG_SETMASK, &iset, NULL);  //修改该进程的信号屏蔽字同时也接受之前的屏蔽字

//     while(1)
//     {
//         printf("hello, I am running, ID is: %d\n", getpid());
//         sleep(1);
//     }

//     return 0;

// }

// #include<stdio.h>
// #include<unistd.h>
// #include<stdlib.h>
// #include<sys/types.h>
// #include<signal.h>

// //sigpending
// void printPending(sigset_t *pending)
// {
//     int i = 0;
//     for(i = 1; i < 32; i++)
//     {
//         if(sigismember(pending, i))
//             printf("1 ");
//         else    
//             printf("0 ");
//     }
//     printf("\n");
// }


// //目的：阻塞2号信号，同时获取位图，
// int main()
// {
//     sigset_t set, oset;
//     sigemptyset(&set);
//     sigemptyset(&oset); //清空数据集

//     sigaddset(&set, 2); //加入2号信号
//     sigprocmask(SIG_SETMASK, &set, &oset); //阻塞2号信号

//     sigset_t pending;
//     sigemptyset(&pending);

//     printf("the pid is:%d\n", getpid());
//     while(1)
//     {
//         sigpending(&pending);
//         printPending(&pending);
//         sleep(1);
//     }
//     return 0;

// }


// void printPending(sigset_t *pending)
// {
//     int i = 0;
//     for(i = 1; i < 32; i++)
//     {
//         if(sigismember(pending, i))
//             printf("1 ");
//         else 
//             printf("0 ");
//     }

//     printf(" ");
// }

// void handler(int signo)
// {
//     printf("handler signo:%d\n", signo);
// }

// int main()
// {
//     signal(2, handler);

//     sigset_t set;
//     sigset_t oset;
//     sigemptyset(&set);
//     sigemptyset(&oset);

//     sigaddset(&set, 2); //
//     sigprocmask(SIG_SETMASK, &set, &oset); //阻塞2号信号

//     sigset_t pending;
//     sigemptyset(&pending);

//     int count = 0;
//     while(1)
//     {
//         sigpending(&pending); //获取pending
//         printPending(&pending);
//         sleep(1);
//         count++;
//         if(count == 20)
//         {
//             sigprocmask(SIG_SETMASK, &oset, NULL); //恢复曾经屏蔽的信号
//             printf("恢复信号屏蔽字\n");
//         }
//     }

//     return 0;
// }

//子进程写，父进程读
// int main()
// {
//     int fd[2] = { 0 };
//     if(pipe(fd) < 0)
//     {
//         perror("pipe");
//         return 1;
//     }

//     pid_t id = fork();
//     if(id == 0)
//     {
//         //子进程,关闭读端
//         close(fd[0]);
//         const char* msg = "hello father, I am child...";
//         int count = 10;
//         while(count--)
//         {
//             write(fd[1], msg, strlen(msg));
//             sleep(1);
//         }
//         close(fd[1]);   //写完关闭文件
//         exit(0);
//     }
//     //父进程
//     close(fd[1]);   //父进程关闭写端
//     char buff[64];
//     while(1)
//     {
//         ssize_t s = read(fd[0], buff, sizeof(buff));
//         if(s > 0)
//         {
//             buff[s] = '\0';
//             printf("child send to father: %s\n", buff);
//         }
//         else if(s == 0)
//         {
//             printf("read file end\n");
//             break;
//         }
//         else{
//             printf("read error!\n");
//             break;
//         }  
//     }
//     close(fd[0]);
//     waitpid(id, NULL, 0);
//     return 0;
// }

//创建fifo文件
#define FILE_NAME "myfifo"

int main()
{
    umask(0);   //设置文件掩码为0
    if(mkfifo(FILE_NAME, 0666) < 0)
    {
        perror("mkfifo");
        return 1;
    }

    //创建成功
    return 0;
}